package IO;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;

import Roteador.Neighbour;

public class RoutersIO {

	private static String pathRoteador = "./roteador.config";
	private static String pathEnlaces = "./enlaces.config";

	/**
	 * A partir do id de um elemento, retorna o seu ip.
	 * @param id do elemento
	 * @return Objeto InetAddress com o ip do elemento em questão
	 */
	public static InetAddress getIpFromId(String id){
		try {
			BufferedReader in = new BufferedReader(new FileReader(pathRoteador));
			String str;
			while (in.ready()) {
				str = in.readLine();
				String[] conteudo = str.split(" ");
				if (conteudo[0].equals(id))
					return InetAddress.getByName(conteudo[2]);
			}
			in.close();
		} catch (IOException e) {
		}
		return null;
	}

	/**
	 *  A partir do id de um elemento, retorna a porta do processo.
	 * @param id do elemento
	 * @return número da porta.
	 */
	public static int getPortFromId(String id){
		try {
			BufferedReader in = new BufferedReader(new FileReader(pathRoteador));
			String str;
			while (in.ready()) {
				str = in.readLine();
				String[] conteudo = str.split(" ");
				if (conteudo[0].equals(id))
					return Integer.parseInt(conteudo[1]);
			}
			in.close();
		} catch (IOException e) {
		}
		return 0;
	}

	/**
	 * Lista os vizinhos de um elemento.
	 * @param id do elemento
	 * @return Lista de Neighbours com todos os vizinhos do elemento.
	 */
	public static ArrayList<Neighbour> getNeighboursFromId(String id){
		ArrayList<Neighbour> result = new ArrayList<Neighbour>();

		try {
			BufferedReader in = new BufferedReader(new FileReader(pathEnlaces));
			String str;
			while (in.ready()) {
				str = in.readLine();
				String[] conteudo = str.split(" ");
				if (conteudo[0].equals(id)){
					String id2 = conteudo[1];
					result.add(new Neighbour(id2, getIpFromId(id2), getPortFromId(id2), Integer.parseInt(conteudo[2]),true));	                }
				else if (conteudo[1].equals(id)){
					String id2 = conteudo[0];
					result.add(new Neighbour(id2, getIpFromId(id2), getPortFromId(id2), Integer.parseInt(conteudo[2]),true));
				}

			}
			in.close();
		} catch (IOException e) {
		}

		return result;
	}

}
